# 求导数
import numpy as np
import matplotlib
import matplotlib
matplotlib.use("TkAgg")
import matplotlib.pylab as plt


def function_1(x):
    return 0.01 * x ** 2 + 0.1 * x


x = np.arange(0.0, 20.0, 0.1)  # 以 0.1为单位，从 0到 20的数组 x
y = function_1(x)

plt.xlabel("x")
plt.ylabel("f(x)")
plt.plot(x, y)
plt.show()


def numerical_diff1(f, x):
    h = 10e-50
    return (f(x + h) - f(x)) / h


# 利用微小的差分求导数的过程称为数值微分 （numerical differentiation）
def numerical_diff2(f, x):
    h = 1e-4  # 0.0001
    return (f(x + h) - f(x - h)) / (2 * h)


print(numerical_diff1(function_1, 5))
print(numerical_diff1(function_1, 10))

print(numerical_diff2(function_1, 5))
print(numerical_diff2(function_1, 10))
